﻿#region GNU General Public License
/*
-----------------------------------------------------------------------------
This source file is part of jscc
    (Javascript with Classes)
For the latest info, see http://code.google.com/p/jscc

Copyright (c) 2011 Tapani Valkonen

jscc is free software: you can redistribute it and/or modify it under 
the terms of the GNU General Public License as published by the 
Free Software Foundation, either version 3 of the License, or (at your option)
any later version. 
 
jscc is distributed in the hope that it will be useful, 
but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
for more details.

You should have received a copy of the GNU General Public License 
along with jscc. If not, see http://www.gnu.org/licenses/.
-----------------------------------------------------------------------------
*/
#endregion

using System;
using System.Collections.Generic;
using System.Text;
using jscc.Ast;

namespace jscc.CodeGen
{
    public class JsMethod : CodeNode
    {
        protected AstMethod ast;

        public JsMethod(AstMethod method)
        {
            this.ast = method;
        }

        public override void Write(CodeWriter writer)
        {
            AstClass parent = ast.Parent as AstClass;
            // TODO: Error
            if (parent == null) return;

            switch (ast.Access)
            {
                case Accesability.Private:
                    writer.Write("var ");
                    break;

                case Accesability.Public:
                    writer.Write("this.");
                    break;

                case Accesability.Static:
                    writer.Write(parent.Name);
                    writer.Write(".");
                    break;
            }

            WriteFunction(writer);
        }

        /*public override void WriteOutside(CodeWriter writer)
        {
            AstClass parent = ast.Parent as AstClass;
            // TODO: Error
            if(parent == null) return;

            if (ast.Access == Accesability.Static)
            {
                writer.Write(parent.Name);
                writer.Write(".");
                WriteFunction(writer);
            }
        }*/

        private void WriteFunction(CodeWriter writer)
        {
            writer.Write(ast.Name);
            writer.Write(" = function(");

            if (!string.IsNullOrEmpty(ast.Parameters))
                writer.Write(ast.Parameters);

            writer.Write(")");
        }
    }
}
